package com.transaction.demo.message.service;

import com.transaction.demo.common.util.ResultPage;
import com.transaction.demo.message.vo.req.TransactionMessageAddReqVo;
import com.transaction.demo.message.vo.req.TransactionMessageListReqVo;
import com.transaction.demo.message.vo.req.WaitOrSendMessageListReqVo;
import com.transaction.demo.message.vo.resp.TransactionMessageRespVo;

/**
 * 描述：
 * 作者：马庆智
 * 日期：2023/04/26 10:29:01
 */
public interface TransactionMessageService {

	/**
	 * 查询列表
	 *
	 * @param transactionMessage 请求参数
	 * @return ResultPage<TransactionMessageResp>
	 * @author 马庆智
	 * @date: 2023/04/26 10:29:01
	 */
	ResultPage<TransactionMessageRespVo> queryTransactionMessageList(TransactionMessageListReqVo transactionMessage);

	/**
	 * 预存储消息.
	 * @param transactionMessage 消息
	 * @return id
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	int saveMessageWaitingConfirm(TransactionMessageAddReqVo transactionMessage);

	/**
	 * 确认并发送消息.
	 *
	 * @param messageId 消息id
	 * @author 马庆智
	 * @date: 2023/4/27 10:01
	 */
	int confirmAndSendMessage(String messageId);

	/**
	 * 存储并发送消息.
	 * @param transactionMessage 消息
	 * @return id
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	int saveAndSendMessage(TransactionMessageAddReqVo transactionMessage);

	/**
	 * 直接发送消息.
	 * @param transactionMessage 消息
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	int directSendMessage(TransactionMessageAddReqVo transactionMessage);

	/**
	 * 重发消息.
	 * @param transactionMessage 消息
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	int reSendMessage(TransactionMessageAddReqVo transactionMessage);

	/**
	 * 根据messageId重发某条消息.
	 * @param messageId 消息id
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	int reSendMessageByMessageId(String messageId);

	/**
	 * 将消息标记为死亡消息.
	 * @param messageId 消息id
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	int setMessageToAreadlyDead(String messageId);

	/**
	 * 根据消息ID获取消息
	 * @param messageId 消息id
	 * @return TransactionMessageAddReqVo
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	TransactionMessageRespVo getMessageByMessageId(String messageId);

	/**
	 * 根据消息ID删除消息
	 * @param messageId 消息id
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	int deleteMessageByMessageId(String messageId);

	/**
	 * 重发某个消息队列中的全部已死亡的消息.
	 *
	 * @param queueName 队列名称
	 * @param batchSize 发送的数量
	 * @author 马庆智
	 * @date: 2023/4/27 9:55
	 */
	long reSendAllDeadMessageByQueueName(String queueName, int batchSize);

	/**
	 * 查询待确认或者发送中的的消息
	 *
	 * @param record 请求参数
	 * @return TransactionMessageResp
	 * @author 马庆智
	 * @date: 2023/04/26 10:29:01
	 */
	ResultPage<TransactionMessageRespVo> queryWaitOrSendMessageList(WaitOrSendMessageListReqVo record);
}